package cn.cool.middleware.biz_exception_retry.config.interfaces;

import cn.cool.middleware.biz_exception_retry.domain.model.entity.BizExceptionRetryParamEntity;
import cn.cool.middleware.biz_exception_retry.types.common.context.RetryContext;

/**
 * 用户自定义逻辑的接口
 * 如果用户选择自定义逻辑，那么将不会自动调用原有链路。
 */
public interface BizExceptionRetryStrategy {

    void retry(BizExceptionRetryParamEntity paramEntity);

    default void apply(BizExceptionRetryParamEntity paramEntity) {
        try {
            // 设置 tag 标记位
            RetryContext.set(true);
            retry(paramEntity);
        }finally {
            RetryContext.remove();
        }
    }
}